package cc.lj.internal.core.utils;

import com.google.common.base.CaseFormat;

import java.util.HashMap;
import java.util.Map;

/**
 * 驼峰与下划线之间的转换
 * @author liangxifeng
 * @date 2022/11/21 17:37
 */

public class UnderlineToCamelUtils {
    /**
     * 小驼峰转换为下划线
     * 例子：studentName=>student_name
     */
    public static String camelToUnderLine(String s) {
        String regex =".*[A-Z].*";
        //如果字符串本身包换下划线，则原样返回
        if (s == null || s.indexOf('_') > 0 ) {
            return s;
        }
        String resultStr = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, s);
        return resultStr;
    }
    /**
     * map 类型 下划线转为小驼峰
     * 例子：Map<student_name=>studentName>
     * @param map
     */
    public static Map<String,Object> mapUnderLineToCamel(Map<String, Object> map) {
        Map<String,Object> returnMap = new HashMap<>();
        map.forEach((key,value)->{
            //将key下划线转换为小驼峰
            String keyNew = underLineToCamel(key);
            returnMap.put(keyNew,value);
        });
        return returnMap;
    }

    /**
     *
     * map小驼峰转换为下划线
     * 例子：Map<studentName=>student_name>
     * @param map
     * @return
     */
    public static Map<String,Object> mapCamelToUnderLine(Map<String, Object> map) {
        Map<String,Object> returnMap = new HashMap<>();
        map.forEach((key,value)->{
            //将key下划线转换为小驼峰
            String keyNew = camelToUnderLine(key);
            returnMap.put(keyNew,value);
        });
        return returnMap;
    }

    /**
     * 下划线转换为小驼峰
     * 例子：student_name=>studentName
     * @param s
     * @return
     */
    public static String underLineToCamel(String s) {
        //如果s==null 或 s中没有下划线，则返回s本身
        if(s == null || s.indexOf('_') < 0) {
            return s;
        }
        String resultStr = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, s);
        return resultStr;
    }

}
